/////////////////////////////////////////////////////////////////////////////// 
// Copyright (C) 2002-2023, Open Design Alliance (the "Alliance"). 
// All rights reserved. 
// 
// This software and its documentation and related materials are owned by 
// the Alliance. The software may only be incorporated into application 
// programs owned by members of the Alliance, subject to a signed 
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable  
// trade secrets of the Alliance and its suppliers. The software is also 
// protected by copyright law and international treaty provisions. Application  
// programs incorporating this software must include the following statement 
// with their copyright notices:
//   
//   This application incorporates Open Design Alliance software pursuant to a license 
//   agreement with Open Design Alliance.
//   Open Design Alliance Copyright (C) 2002-2023 by Open Design Alliance. 
//   All rights reserved.
//
// By use of this software, its documentation or related materials, you 
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////

namespace SmartPlant.OdKernelUILib.Helpers
{
    public class OdExControlHDCHelper
    {
        private Control m_TargetControl;

        private bool m_IsHdcUsed = false;
        private Graphics m_Graphics = null;

        public OdExControlHDCHelper(Control targetControl)
        {
            m_TargetControl = targetControl;
        }

        public void Init()
        {
            m_Graphics = Graphics.FromHwnd(m_TargetControl.Handle);
        }

        public void UnInit()
        {
            ReleaseControlHDC();
        }

        public IntPtr GetControlHDC()
        {
            if (m_IsHdcUsed || m_Graphics == null)
                return IntPtr.Zero;
            m_IsHdcUsed = true;
            return m_Graphics.GetHdc();
        }

        public IntPtr GetControlHWND()
        {
            return m_TargetControl.Handle;
        }

        private void ReleaseControlHDC()
        {
            if (!m_IsHdcUsed || m_Graphics == null)
                return;
            m_Graphics.ReleaseHdc();
            m_IsHdcUsed = false;
        }
    }

}